package com.somewater.storage
{
	/**
	 * Объект с информацией касательно самого игрока
	 */
	public class GameUserDef extends UserDef
	{
		public static var instance:GameUserDef;
		
		private var listeners:Array = [];
		
		
		////////////////////////////
		//
		//		MONEY
		//
		////////////////////////////
		private var _money:int;
		public function set money(value:int):void
		{
			if(_money != value)
			{
				_money = value;
				dispatchChange();
			}
		}
		public function get money():int
		{
			return _money;
		}
		
		
		////////////////////////////
		//
		//		XP
		//
		////////////////////////////
		private var _xp:int;
		public function set exp(value:int):void
		{
			if(_xp != value)
			{
				_xp = value;
				dispatchChange();
			}
		}
		public function get exp():int
		{
			return _xp;
		}
		
		
		
		public function GameUserDef(data:Object)
		{
			super(data);
			
			instance = this;
		}
		
		
		/**
		 * Подписаться на изменения информации
		 */
		public static function bind(listener:Function):void
		{
			for(var i:int = 0;i<instance.listeners.length;i++)
			{
				if(instance.listeners[i] == listener)
					return;
			}
			
			instance.listeners.push(listener);
			
			listener();
		}
		
		
		/**
		 * Отписаться от изменения информации
		 */
		public static function unbind(listener:Function):void
		{
			for(var i:int = 0;i<instance.listeners.length;i++)
			{
				if(instance.listeners[i] == listener)
				{
					instance.listeners.splice(i, 1);
					return;
				}
			}
		}
		
		
		/**
		 * Вызвать все колбеки, переданные для прослушки изменений пользовательской	 инфы
		 */
		public function dispatchChange():void
		{
			for(var i:int = 0;i<listeners.length;i++)
			{
				listeners[i]();
			}
		}
	}
}